\subsection{Случай с функцией \IT{vprintf()}}
\myindex{\CStandardLibrary!vprintf}
\myindex{\CStandardLibrary!va\_list}

Многие программисты определяют свою собственную функцию для записи в лог, которая берет строку формата 
вида \printf + переменное количество аргументов.

Еще один популярный пример это функция die(), которая выводит некоторое сообщение и заканчивает работу.

Нам нужен какой-то способ запаковать входные аргументы неизвестного количества и передать их в функцию \printf.

Но как?
Вот зачем нужны функции с \q{v} в названии.

Одна из них это \IT{vprintf()}: она берет строку формата и указатель на переменную типа \TT{va\_list}:

\lstinputlisting[style=customc]{\CURPATH/die.c}

При ближайшем рассмотрении, мы можем увидеть, что \TT{va\_list} это указатель на массив.

Скомпилируем:

\lstinputlisting[caption=\Optimizing MSVC 2010,style=customasmx86]{\CURPATH/die_MSVC2010_Ox_RU.asm}

Мы видим, что всё что наша функция делает это просто берет указатель на аргументы, 
передает его в \IT{vprintf()},
и эта функция работает с ним, как с бесконечным массивом аргументов!

\lstinputlisting[caption=\Optimizing MSVC 2012 x64,style=customasmx86]{\CURPATH/die_MSVC2012_x64_Ox_RU.asm}
